/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package niti;

import gui.MainGui;
import java.net.Socket;
import util.Skripte;

/**
 *
 * @author shone
 */
public class Provera extends Thread {

    //stanja konektivnosti
    public static final int stanje_online = 1;
    public static final int stanje_offline = 2;
    private boolean radi;
    private int stanje;
    private long cekanjeSkripteMilis;
    private long intervalProvereMilis;
    private String adresaZaProveru;
    private int portZaProveru;
    private MainGui gui;
    private Skripte skripte;

    public Provera(long cekanjeSkripteMilis, long intervalProvereMilis,
            String adresaZaProveru, int portZaProveru, MainGui gui, Skripte skripte) {

        this.cekanjeSkripteMilis = cekanjeSkripteMilis;
        this.intervalProvereMilis = intervalProvereMilis;
        this.adresaZaProveru = adresaZaProveru;
        this.portZaProveru = portZaProveru;
        this.gui = gui;
        this.skripte = skripte;
        stanje = Provera.stanje_offline;
        radi = false;
        setDaemon(true);
    }

    @Override
    public void run() {
        while (radi) {
            if (proveriKonekciju()) {
                if (stanje == Provera.stanje_offline) {
                    stanje = Provera.stanje_online;
                    gui.setStatus("online");
                    gui.dodajInformaciju("Adresa za proveru je dostupna: " + adresaZaProveru);
                }
                sacekaj(intervalProvereMilis);
            } else {
                gui.dodajInformaciju("Adresa za proveru je nedostupna: " + adresaZaProveru);
                gui.setStatus("offline");
                stanje = Provera.stanje_offline;
                String rez = izvrsiSkriptu();
                gui.dodajInformaciju(rez);
                sacekaj(cekanjeSkripteMilis);
            }
        }
    }

    private boolean proveriKonekciju() {
        Socket socket = null;
        boolean ret = false;

        try {
            socket = new Socket(adresaZaProveru, portZaProveru);
            ret = true;
        } catch (Exception e) {
        } finally {
            try {
                socket.close();
            } catch (Exception e) {
            }
            socket = null;
        }

        return ret;
    }

    private void sacekaj(long milis) {
        try {
            Thread.sleep(milis);
        } catch (Exception e) {
        }
    }

    private String izvrsiSkriptu() {
        return skripte.izvrsiSledecu();
    }

    public void pocniProvere() {
        radi = true;
        start();
        gui.dodajInformaciju("Pocinjem da proveravam adresu: " + adresaZaProveru
                + " na portu: " + portZaProveru);
    }
}
